import os
from 参数传入 import (
    user_input_previous_text, 
    user_input_chapter_outline, 
    user_input_chosen_direction, 
    user_input_novel_framework,
    user_input_relevant_elements
) # 只导入用户数据
from llm_manager import get_llm_client
from prompt_manager import get_active_prompt # 导入新的提示词加载函数

# --- 函数定义 ---
def generate_content_and_next_directions(
    llm_client,
    base_content_prompt: str,
    previous_text: str,
    chapter_outline: str,
    chosen_direction: str,
    novel_framework: str,
    relevant_elements: str | None = None
) -> str:
    """
    调用配置好的大模型生成续写内容并预测下一步发展方向。
    参数:
        llm_client: 已初始化的LLM客户端实例。
        base_content_prompt (str): 从 prompt_manager 加载的激活的基础提示词。
        ...
    """
    try:
        input_section = "输入内容:\n"
        input_section += f"1. 【上文内容】 (Previous Content):\nMarkdown\n{previous_text}\n\n"
        input_section += f"2. 【本章细纲】 (Current Chapter Outline / Xìgāng):\nMarkdown\n{chapter_outline}\n\n"
        input_section += f"3. 【选定方向】 (Chosen Direction from Last Step):\nMarkdown\n{chosen_direction}\n\n"
        input_section += f"4. 【整体框架】 (Novel Framework):\nMarkdown\n{novel_framework}\n"
        if relevant_elements and relevant_elements.strip():
            input_section += f"\n5. （可选）【关联元素】 (Optional Relevant Elements):\nMarkdown\n{relevant_elements}\n"
        final_prompt_to_send = f"{base_content_prompt}\n\n{input_section}"
        messages = [
            {
                "role": "user",
                "content": final_prompt_to_send
            }
        ]
        response = llm_client.chat_completions_create(
            messages=messages,
            stream=False
        )
        if response and hasattr(response, 'choices') and response.choices:
            generated_output = response.choices[0].message.content
            return generated_output
        else:
            print(f"[generate_content_and_next_directions] 模型响应无效。响应: {response}")
            return "模型未能生成有效内容，请检查API调用或提示词。"
    except Exception as e:
        return f"调用API生成内容和方向时发生错误: {e}"

# --- 主程序执行 ---
if __name__ == "__main__":
    TASK_NAME = "content_generation"
    print(f"开始为任务 '{TASK_NAME}' 调用大模型 (通过LLM和Prompt管理器)...")

    try:
        llm_client_for_task = get_llm_client(TASK_NAME)
        active_prompt_for_task = get_active_prompt(TASK_NAME)
        print(f"使用模型配置: {llm_client_for_task.__class__.__name__} (模型: {getattr(llm_client_for_task, 'model_name', 'N/A')})")
        print(f"使用提示词 (部分预览):\n{active_prompt_for_task[:200]}...")
    except Exception as e:
        print(f"错误：无法初始化LLM客户端或加载提示词: {e}")
        exit(1)

    print(f"加载的【上文内容】 (部分预览):\n{user_input_previous_text[:150]}...")
    print(f"加载的【本章细纲】 (部分预览):\n{user_input_chapter_outline[:150]}...")
    print(f"加载的【选定方向】 (部分预览):\n{user_input_chosen_direction[:150]}...")
    print(f"加载的【整体框架】 (部分预览):\n{user_input_novel_framework[:150]}...")
    if user_input_relevant_elements and user_input_relevant_elements.strip():
        print(f"加载的【关联元素】 (部分预览):\n{user_input_relevant_elements[:150]}...")
    else:
        print("未加载【关联元素】 (可选)。")

    output_response = generate_content_and_next_directions(
        llm_client=llm_client_for_task,
        base_content_prompt=active_prompt_for_task,
        previous_text=user_input_previous_text,
        chapter_outline=user_input_chapter_outline,
        chosen_direction=user_input_chosen_direction,
        novel_framework=user_input_novel_framework,
        relevant_elements=user_input_relevant_elements
    )

    print("\n--- 模型输出 (Markdown格式) ---")
    print(output_response)
    print("--- 输出结束 ---")

    # 关于调试和稳定性：
    # 1. 确保 `参数传入.py` 中的所有 PROMPT_... 和 user_input_... 变量都有正确且充足的内容。
    #    特别是 `user_input_chosen_direction` 需要包含上一轮选定的方向文本。
    # 2. `user_input_relevant_elements` 是可选的，如果为空或None，脚本也能正常处理。
    # 3. 输出是Markdown格式，包含"续写内容"和"后续情节方向"两大部分。
    # 4. 如果续写字数不符合预期（950-1050字），或风格有偏差，请仔细检查并调整
    #    `PROMPT_CONTENT_GENERATION` 中的相关指令，特别是"核心要求与执行细则"部分。
    # 5. 如果模型未能正确衔接上文或未能遵循细纲/选定方向，请检查这些输入内容的质量和清晰度，
    #    并确保它们被正确地传递给模型。 